package com.christina.service.domain.travel;

import com.christina.service.domain.travel.model.TravelPlanRequest;
import com.christina.service.domain.travel.model.TravelPlanResult;

/**
 * 出行领域服务接口
 * 
 * @author Christina
 */
public interface TravelDomainService {
    
    /**
     * 创建出行规划
     * 
     * @param request 出行规划请求
     * @return 出行规划结果
     */
    TravelPlanResult createTravelPlan(TravelPlanRequest request);
    
    /**
     * 规划出行
     * 
     * @param request 出行规划请求
     * @return 出行规划结果
     */
    TravelPlanResult planTravel(TravelPlanRequest request);
    
    /**
     * 优化出行方案
     * 
     * @param planId 规划ID
     * @param optimizationCriteria 优化标准
     * @return 优化后的方案
     */
    TravelPlanResult optimizeTravelPlan(Long planId, String optimizationCriteria);
    
    /**
     * 获取出行建议
     * 
     * @param request 出行需求
     * @return 出行建议
     */
    String getTravelSuggestions(TravelPlanRequest request);
    
    /**
     * 预订出行服务
     * 
     * @param planId 规划ID
     * @param serviceType 服务类型
     * @return 预订结果
     */
    Object bookTravelService(Long planId, String serviceType);
    
    /**
     * 取消出行规划
     * 
     * @param planId 规划ID
     * @param reason 取消原因
     * @return 取消结果
     */
    boolean cancelTravelPlan(Long planId, String reason);
}